package com.cskaoyan.javase.string._3intern;

import java.net.InetAddress;

/**
 * intern方法补充练习2
 *
 * @since 11:19
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    /*
        该行语句创建了几个字符串对象?
        2个
        该行代码最先执行,这时就会把"h1h2"常量在堆上创建对象,把地址存入字符串常量池
        然后new关键字在堆上又会创建一个新的,独立的"h1h2"对象,这个对象用引用s指向它
     */
    static String s = new String("h1h2");

    // fft ttt
    public static void main(String[] args) {
        // 这里的"h1h2"对象是变量拼接得到的,所以它是堆上的一个新的,独立的对象
        String str = new String("h1") + new String("h2");

        // 这时"h1h2"对象已经是拘留字符串,所以直接返回它的引用,这个拘留字符串之前没有任何(代码中)引用指向它
        // str2是一个新的引用,指向一个拘留字符串
        String str2 = str.intern();
        // "h1h2"已经是拘留字符串了,所以共享,str2和str3指向同一个拘留字符串
        String str3 = "h1h2";

        // false
        System.out.println(str == str2);
        // false
        System.out.println(str == str3);
        // true
        System.out.println(str2 == str3);


    }
}
